Connection pooling is a well known technique in software engineering which allows reusing of expensive connection objects. In an enterprise environment, a connection to a backend system such as database or enterprise information system is an example of an expensive connection object. Pooling and reusing these expensive connections leads to better scalability and performance of the enterprise environment.
One of the most common issues regarding connection pooling is the possibility of connection leaks. A connection leak occurs if an enterprise component misuses an acquired connection. For example, if the connection is not closed at the end of a call to the enterprise component or if there is an ongoing transaction which is not completed at the end of the call, the connection will not be released by the enterprise component and will not be returned to the pool. After a certain amount of calls the pool will be exhausted and each subsequent call to an enterprise component which requires a connection will fail.
The standard way of dealing with connection leaks requires numerous attempts to reproduce the problem and analyzing all connection leaks generated in the enterprise environment log files in order to identify the enterprise component causing the connection leak. Such an approach is time consuming and sometimes the generated information could be misinterpreted. Therefore, a more efficient approach is needed, providing human readable metadata about the status of a connection object and the enterprise component acquired the connection.